#define _CRT_SECURE_NO_WARNINGS 1

//#include<stdio.h>
//#include<assert.h>
//void* my_memcpy(void* p1, void* p2, size_t num)
//{
//	void* ret = p1;
//	assert(p1 && p2);
//	while (num--)
//	{
//		*(char*)p1 = *(char*)p2;
//		p1 = (char*)p1 + 1;
//		p2 = (char*)p2 + 1;
//	}
//	return ret;
//}
//int main()
//{
//	int arr1[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//	int arr2[20] = { 22,33,44 };
//	my_memcpy(arr1+2, arr1, 20);
//	int i = 0;
//	for (i = 0; i < 12; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}




//#include<stdio.h>
//int main()
//{
//	int arr1[12] = { 1,2,3,4,5,6,7,8,9,10,11,12 };
//	int arr2[20] = { 22,33,44 };
//	memcpy(arr1+2, arr1, 20);
//	int i = 0;
//	for (i = 0; i < 12; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}




//#include<stdio.h>
//#include<assert.h>
//void* my_memmove(void* p1, void* p2, size_t num)
//{
//	void* ret = p1;
//	assert(p1 && p2);
//	if (p1 , p2)
//	{
//		while (num--)
//		{
//			*(char*)p1 = *(char*)p2;
//			p1 = (char*)p1 + 1;
//			p2 = (char*)p2 + 1;
//		}
//	}
//	else
//	{
//		while (num--)
//		{
//			*((char*)p1 + num) = *((char*)p2 + num);
//		}
//	}
//	
//	return ret;
//}
//int main()
//{
//	int arr1[10] = { 1,2,3,4,5,6,7,8,9,10};
//	my_memmove(arr1, arr1+2, 20);
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d ", arr1[i]);
//	}
//	return 0;
//}


//#include<stdio.h>
//int main()
//{
//	int arr1[] = { 1,2,1,4,5,6 };
//	int arr2[] = { 1,2,2000 };
//	int ret = memcmp(arr1, arr2, 10);
//	printf("%d\n", ret);
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
//	int* p = NULL;
//	p = (int *)malloc(10 * sizeof(int));
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d\n", *(p + i));
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}


//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
//	int* p = NULL;
//	p = (int *)calloc(10 , sizeof(int));
//	if (p == NULL)
//	{
//		perror("calloc");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//		printf("%d\n", *(p + i));
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}



//#include<stdio.h>
//#include<stdlib.h>
//int main()
//{
//	int* p = NULL;
//	p = (int *)malloc(10 * sizeof(int));
//	if (p == NULL)
//	{
//		perror("malloc");
//		return 1;
//	}
//	int i = 0;
//	for (i = 0; i < 10; i++)
//		{
//		   *(p + i) = i;;
//		}
//	int* pp = (int *)realloc(p, 20 * sizeof(int));
//	if (pp != NULL)
//	{
//		p = pp;
//		pp = NULL;
//	
//	}
//	else
//	{
//		p = NULL;
//		perror("realloc");
//		return 1;
//	}
//	
//	for (i = 0; i < 20; i++)
//	{
//		printf("%d\n", *(p + i));
//	}
//	free(p);
//	p = NULL;
//	return 0;
//}

//#include<stdio.h>
//#include<stdlib.h>
//void GetMemory(char** p)
//{
//	*p = (char*)malloc(100);
//}
//void Test(void)
//{
//	char* str = NULL;
//	GetMemory(&str);
//	strcpy(str, "hello world");
//	printf(str);
//}



//#include<stdio.h>
//#include<stdlib.h>
//char* GetMemory(void)
//{
//	static char p[] = "hello world";
//	return p;
//}
//void Test(void)
//{
//	 char* str = NULL;
//	str = GetMemory();
//	printf(str);
//}
//
//int main()
//{
//	Test();
//	return 0;
//}